home *** CD-ROM | disk | FTP | other *** search
/ Aminet 7 / Aminet 7 - August 1995.iso / Aminet / misc / sci / RARS_Amiga_3.lha / RARS / report.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-27  |  4.7 KB  |  156 lines

  1. // REPORT.CPP - output of racing and other data to a file - M. Timin, March 1995
  2. // for RARS version 0.60
  3. // ver. 0.50 4/5/95
  4. // ver. 0.6b 5/8/95 b for beta
  5. // ver. 0.60 5/17/95
  6.  
  7. #include <fstream.h>
  8. #include <iostream.h>
  9. #include <string.h>
  10. #include <iomanip.h>
  11. #include "track.h"
  12. #include "car.h"
  13. #include "os.h"
  14.  
  15. ofstream fout;               // fout is the output stream object (to a file)
  16.  
  17. extern car_ID drivers[];     // The array of robot functions, colors & names
  18.  
  19. static int how_many;        // The number of cars competing
  20.  
  21. int find_name(char* name)  // Find this name in the drivers[] array,
  22. {                          // return its index.
  23.    int i, cmp;
  24.  
  25.    for(i=0; i<MAXCARS; i++) {
  26.       cmp = strcmp(name, drivers[i].rob_name);
  27.       if(!cmp)
  28.          break;
  29.    }
  30.    if(i == MAXCARS)
  31.       return -1;              // -1 is returned if name is not found,
  32.    else
  33.       return i;               // else returned value will be 0 - 15
  34. }
  35.  
  36. void print_help_file(void)  // prints RARS.HLP to the screen, or if the
  37. {                           // file is not found, prints embedded text string.
  38.    ifstream fin("rars.hlp");
  39.    char c;
  40.    int linecount = 0;
  41.  
  42.    if(!fin)  {
  43.       cout << "RARS.HLP is missing." << endl;
  44.    }
  45.    else
  46.       while((c = (char)fin.get()) != EOF) {
  47.          if(c == '\n')                      // a simple paging facility
  48.             if(++linecount == LINES_PER_PAGE) {
  49.                linecount = 0;
  50.                cout  << endl << "(any key to continue)";
  51.                get_ch();
  52.                cout << endl;
  53.             }
  54.             else
  55.                cout << endl;
  56.          else
  57.             cout << c;
  58.       }
  59. }
  60.  
  61. // show remaining RAM:
  62. void RAM_report(void)
  63. {
  64.    int rami = RAM_query();   // returns number of free 1 K RAM blocks
  65.    fout << endl << rami << " K bytes of heap remained unused." << endl;
  66. }
  67.  
  68. // outputs comma-separated list of robot's names to the output file
  69. void output_names(int cars, car_ID* drivers, int* order)  
  70.    for(int i=0; i<cars; i++) {
  71.       if(i < cars - 1)  {
  72.          fout << drivers[order[i]].rob_name << ", ";
  73.          if(i == 7)
  74.             fout << endl;
  75.       }
  76.       else
  77.          fout << "and " << drivers[order[i]].rob_name << "." << endl;
  78.    }
  79.    fout << endl;
  80. }
  81.  
  82. // Outputs number of cars and laps, name of track file, and the robot's names.
  83. // Also, the starting seed of the random variable generator.
  84. // Also, opens the output file, fout, using a name made from the track file.
  85. void report_overall(int cars, int laps, car_ID* drivers, long seed)
  86. {
  87.    how_many = cars;   // store the car count for later use
  88.    int ord[MAXCARS], i;
  89.    char string[256];
  90.  
  91.    // make a filename like the track name, but with the .out extension:
  92.    strcpy(string, trackfile);
  93.    for(i=0; string[i] != 0; i++) 
  94.       if(string[i] == '.' || string[i] == 0)
  95.          break;
  96.    string[i++] = '.';
  97.    string[i++] = 'O';
  98.    string[i++] = 'U';
  99.    string[i++] = 'T';
  100.    string[i] = 0;
  101.  
  102.    fout.open(string);  // Open the output file
  103.  
  104.    fout << cars << " cars for " << laps << " laps.  The track was ";
  105.    fout << trackfile << ".  The drivers were:" << endl;
  106.    for(i=0; i<MAXCARS; i++)
  107.       ord[i] = i;
  108.    output_names(cars, drivers, ord);
  109.    fout << "The initial RVG seed was " << seed << "." << endl;
  110.    if(practice)
  111.       fout << practice << " practice laps were requested." << endl;
  112.    fout << endl;
  113. }
  114.  
  115. // Outputs the race number, the finishing order, the average speeds,
  116. // fuel remaining and the accumulated points (formula one point system).
  117. // Also, the laps finished and damage for each car.
  118. void report_results(int race, int* order, car_ID* drivers, Car** pcar, int* ord)
  119. {
  120.    int i, k, m, who;
  121.    const int points[] = { 10, 6, 4, 3, 2, 1 };
  122.    static int accum_pts[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  123.  
  124.    fout << "   results of race " << race << ":" << endl;
  125.    fout << "starting positions:" << endl;
  126.  
  127.    output_names(how_many, drivers, ord);
  128.  
  129.    // The places:
  130.    m = how_many;
  131.    for(i=0; i<m; i++) {
  132.       k = order[i];
  133.       who = find_name(drivers[k].rob_name); // Where is the kth car in the original list?
  134.       if(i < 6)
  135.          accum_pts[who] += points[i];
  136.       fout << setiosflags(ios::right)<< setw(2) << (i+1) << (" ");
  137.       fout << setw(8) << drivers[k].rob_name;
  138.       fout << setprecision(2);
  139.       fout << setiosflags(ios::left);
  140.       fout << "  avg spd " << setw(6) << pcar[k]->speed_avg * MPH_FPS;
  141.       fout << setiosflags(ios::right);
  142.       fout << "  " << setw(3)  << pcar[k]->laps << " laps  ";
  143.       fout  << setw(5) << pcar[k]->damage << " damage  ";
  144.       fout  << setw(3) << int(pcar[k]->fuel) << " fuel  ";
  145.       fout  << setw(3) << accum_pts[who] << " pts accum" << endl;
  146.    }
  147.    fout << endl;
  148. }
  149.  
  150. void version_report(void)
  151. {
  152.    cout << "This is RARS version 0.60.";
  153.    cout << endl;
  154. }
  155.